<?php

/**
 * 对微信小程序用户加密数据的解密示例代码.
 * @copyright Copyright (c) 1998-2014 Tencent Inc.
 */

namespace app\api\controller;

use app\common\controller\BasicApi;

class Decrypt extends BasicApi
{

	/**
	 * 检验数据的真实性，并且获取解密后的明文.
	 * @param $encryptedData string 加密的用户数据
	 * @param $iv string 与用户数据一同返回的初始向量
	 * @param $data string 解密后的原文
     *
	 * @return int 成功0，失败返回对应的错误码
	 */
	public function decryptData()
	{
	    // $result = '{"phoneNumber":"13828715651","purePhoneNumber":"13828715651","countryCode":"86","watermark":{"timestamp":1655811870,"appid":"wx8278e826ab8a6f5f"}}';
	    // $this->success('成功',json_decode($result,true),200);
        $wechat_mini = config('wechat.miniapp');
        $appid =  $wechat_mini['appid'];
        $sessionKey = $this->request->post('session_key');
	    $encryptedData = $this->request->post('encryptedData');
        $iv = $this->request->post('iv');
		$aesKey=base64_decode($sessionKey);
		if (strlen($iv) != 24) {
			return $this->ErrorCode()['IllegalIv'];
		}
		$aesIV=base64_decode($iv);
		$aesCipher=base64_decode($encryptedData);
		$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
		$dataObj=json_decode( $result );
		if( $dataObj  == NULL )
		{
			return  $this->ErrorCode()['IllegalBuffer'];
		}
		if( $dataObj->watermark->appid != $appid )
		{
			return  $this->ErrorCode()['IllegalBuffer'];
		}
        $this->success('获取手机号码成功',json_decode($result),200);
	}

    /**
     * error code 说明.
     * <ul>

     *    <li>-41001: encodingAesKey 非法</li>
     *    <li>-41003: aes 解密失败</li>
     *    <li>-41004: 解密后得到的buffer非法</li>
     *    <li>-41005: base64加密失败</li>
     *    <li>-41016: base64解密失败</li>
     * </ul>
     */
    public function ErrorCode()
    {
        $OK = 0;
        $IllegalAesKey = -41001;
        $IllegalIv = -41002;
        $IllegalBuffer = -41003;
        $DecodeBase64Error = -41004;

        return ['OK'=>$OK,'IllegalAesKey'=>$IllegalAesKey,'IllegalIv'=>$IllegalIv,'IllegalBuffer'=>$IllegalBuffer,'DecodeBase64Error'=>$DecodeBase64Error];
    }


}

